package problem.year2021.april;

import java.util.Arrays;

/**
 * @author liangyuanliu
 * 给定一组非负整数 nums，重新排列每个数的顺序（每个数不可拆分）使之组成一个最大的整数。
 * 注意：输出结果可能非常大，所以你需要返回一个字符串而不是整数。
 *  
 * <p>
 * 示例 1：
 * <p>
 * 输入：nums = [10,2]
 * 输出："210"
 * 示例 2：
 * <p>
 * 输入：nums = [3,30,34,5,9]
 * 输出："9534330"
 * 示例 3：
 * <p>
 * 输入：nums = [1]
 * 输出："1"
 * 示例 4：
 * <p>
 * 输入：nums = [10]
 * 输出："10"
 * <p>
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/largest-number
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class April12 {
    /**
     * 首先nums组成数的位数是不会改变的
     * @param nums 数组
     * @return 返回组成最大数的string
     */
    public String largestNumber(int[] nums) {
        // 第一步：将nums转换成string【】
        String[] strings = new String[nums.length];
        int len = nums.length;
        for (int i = 0; i < len; i++) {
            strings[i] = nums[i] + "";
        }
        // 第二步：根据首字母的大小进行排序
        // string 的排序规则就是，根据第一个字符的大小进行判断，如果字符大，则在后面，否则在前面
        Arrays.sort(strings);
        // 第三步：合并
        StringBuilder ans = new StringBuilder();
        for (int i = len - 1; i >= 0; i--) {
            ans.append(strings[i]);
        }
        return ans.toString();
    }
}
